import router from "./router"; // asyncRouterMap  动态路由
import store from "./store";
import NProgress from "nprogress"; // progress bar
import "nprogress/nprogress.css"; // progress bar style
import { getToken } from "@/utils/auth"; // getToken from cookie
import generateRoutes from "@/utils/load-router";
import start from "./qiankun";

/**
 * 路由拦截
 */
let hasRoles = true;
// 白名单(不需要登录就可以访问的名单)
const whiteList = ["/login"];

router.beforeEach(async (to, form, next) => {
  NProgress.start();
  if (getToken()) {
    // console.log('userInfo', store.getters.userInfo);
    if (!store.getters.userInfo) {
      await store.dispatch('user/getUserInfo')
    }
    if (to.path === "/login") {
      next({
        path: "/",
      });
    } else if (store.getters.topMenus.length == 0) {
      await store.dispatch("user/getUserMenu");
      if (sessionStorage.getItem('tags')) {
        store.commit('tagsView/initTags', JSON.parse(sessionStorage.getItem('tags')))
      }
      // console.log('res', res);
      // 动态路由生成菜单（vuex的数据不能修改），forEach动态路由

      // console.log('routers', routers);
      // router.addRoutes(routers)
      // next()
      // 路由添加进去了没有及时更新 需要重新进去一次拦截
      if (hasRoles) {
        const routers = store.getters.menuTree.map((item) =>
          generateRoutes(item)
        );
        routers.forEach((item) => router.addRoute(item));
        hasRoles = false;
        start()
        next({ ...to, replace: true }); // 这里相当于push到一个页面 不在进入路由拦截
      } else {
        next(); // 如果不传参数就会重新执行路由拦截，重新进到这里
      }
    } else {
      next();
    }
  } else {
    if (whiteList.includes(to.path)) {
      next();
    } else {
      next(`/login?redirect=${to.path}`);
    }
  }
  //   console.log(store.getters.userInfo);

  //   // 是否登录
  //   if (getToken()) {
  //     if (!store.getters.userInfo) {
  //       await store.dispatch('getUserInfo')
  //       resetRouter()
  //       const userMenus = await store.dispatch('getUserMenu')
  //       const routers = generateRoutes(userMenus)
  //       router.addRoutes(routers)
  //       console.log('router', router);
  //     }
  //     store.dispatch('setShowTrue')
  //   } else {
  //     /* has no token*/
  //     if (whiteList.includes(to.path)) {
  //       // 在免登录白名单，直接进入
  //       next()
  //     } else {
  //       next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
  //       // token失效之后 无法重定向至 登录页
  //       if (to.path !== '/' && from.path !== '/') {
  //         Message.error({
  //           message: '验证错误， 请重新登录',
  //           duration: 3000,
  //           onClose: () => {
  //             location.reload()
  //           }
  //         })
  //       }
  //       // NProgress.done()
  //     }
  //   }
});
router.afterEach(() => {
  NProgress.done();
});
